home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / PGM_TOOL / RLINE_OP / READERS.PAS < prev    next >
Pascal/Delphi Source File  |  1989-10-10  |  4KB  |  172 lines

  1. {$A+,B-,D+,E-,F-,I-,L+,N-,O-,R-,S-,V-}
  2. {$M 16384,0,655360}
  3. UNIT Readers;
  4.  
  5. (*******************************************************)
  6.   interface
  7. (*******************************************************)
  8.  
  9. USES
  10.   DOS, Crt, moveops, RLine;
  11.  
  12. TYPE
  13.   ViewPtr = ^Reader;
  14.   Reader = Object(Scroller)
  15.     FO : FileOfLines;
  16.     CONSTRUCTOR Init(FN : String; FileBufSize : Word;
  17.              px1,py1,px2,py2 : integer);
  18.     DESTRUCTOR Done;
  19.     PROCEDURE Help; virtual;
  20.  
  21.     FUNCTION DTAline(Row : LongInt) : String; virtual;
  22.     PROCEDURE GotoLine(X : LongInt); virtual;
  23.  
  24.     PROCEDURE CheckRFerror;
  25.     PROCEDURE ShowStatus; virtual;
  26.     PROCEDURE Message(s : str80); virtual;
  27.     FUNCTION AskString(prompt : string) : string; virtual;
  28.   END;
  29.  
  30. (*******************************************************)
  31.   implementation
  32. (*******************************************************)
  33.  
  34.   CONSTRUCTOR Reader.Init(FN : string; FileBufSize : word;
  35.              px1,py1,px2,py2 : integer);
  36.   BEGIN
  37.     IF FO.Init(FN, FileBufSize)
  38.     THEN BEGIN
  39.       checkrferror;
  40.       Scroller.Init(px1,py1,px2,py2,FO.TotalLines)
  41.     END ELSE Fail;
  42.   END;
  43.  
  44.   PROCEDURE Reader.CheckRFerror;
  45.   BEGIN
  46.     With FO Do BEGIN
  47.       if (RFerror <> 0) and (RFerror <> $FFFF) THEN BEGIN
  48.     Writeln(RFerrorString);
  49.     Halt(1);
  50.       END;
  51.     END;
  52.   END;
  53.  
  54.  
  55.   DESTRUCTOR Reader.Done;
  56.   BEGIN
  57.     FO.Done;
  58.     Scroller.Done;
  59.   END;
  60.  
  61.   FUNCTION Reader.DTAline(Row : LongInt) : String;
  62.   CONST
  63.     Blanks : string[8] = '        ';
  64.   VAR
  65.     i : Integer;
  66.   BEGIN
  67.     With FO DO BEGIN
  68.       SeekLine(Row);
  69.       IF RFerror = 0 THEN BEGIN
  70.         i := pos(^I,LastLine);        { Expand existing tabs }
  71.         while i > 0 do BEGIN
  72.       LastLine[i] := ' ';
  73.       Blanks[0] := chr(i mod 8);
  74.       if blanks[0] > #0
  75.           then blanks[0] := chr(8 - ord(blanks[0]));
  76.       insert(blanks, LastLine, i);
  77.       i := pos(^I,LastLine);
  78.         END;
  79.         DTAline := LastLine;
  80.       END ELSE BEGIN
  81.         DTAline := '';
  82.         RFerror := 0;
  83.       END;
  84.     END;
  85.   END;
  86.  
  87.   PROCEDURE Reader.GotoLine(X : LongInt);
  88.   BEGIN
  89.     IF x <= TotalItems
  90.     THEN Scroller.GotoLine(x)
  91.     ELSE Message('Attempted to GotoLine past End Of File.');
  92.   END;
  93.  
  94.   TYPE
  95.     Helper = object(Scroller)
  96.       FUNCTION DTAline(Row : Longint) : String; virtual;
  97.     END;
  98.  
  99.   CONST
  100.     NHelpers = 17;
  101.  
  102. {$F+}
  103.    FUNCTION Helper.DTAline(Row : Longint) : String;
  104.    CONST
  105.      Hstrings : array[1..NHelpers] of String[32] =
  106.      (' F          Find text',
  107.       ' C          Case-sensitive find',
  108.       ' N          Find next',
  109.       ' A          Auto-Scroll',
  110.       ' 0..9       Adjust scroll speed',
  111.       'PgUp/PgDn   Page up and down',
  112.       'Home        Top of file',
  113.       'End         Bottom of file',
  114.       'Up arrow    Move up',
  115.       'Down arrow  Move down',
  116.       'Right arrow Scroll right',
  117.       'Left arrow  Scroll Left',
  118.       'Ctrl-Right  Scroll 8 chars right',
  119.       'Ctrl-Left   Go to first column',
  120.       'ESCape      Exit to DOS',
  121.       '',
  122.       '  Press ESCape now to return');
  123.    BEGIN
  124.      if Row <= NHelpers
  125.      THEN DTAline := Hstrings[Row]
  126.      ELSE DTAline := '';
  127.    END;
  128. {$F-}
  129.  
  130.   PROCEDURE Reader.Help;
  131.   var
  132.     H : Helper;
  133.   BEGIN
  134.     H.Init(x1,y1,x2,y2,NHelpers);
  135.     H.WrScr;
  136.     while H.scrollselect <> #27 do ;
  137.     H.Done;
  138.     wrscr;
  139.   END;
  140.  
  141.   FUNCTION Reader.AskString(prompt : string) : string;
  142.   var
  143.     s : string[40];
  144.   BEGIN
  145.     AskString := '';
  146.     gotoxy(1,2);
  147.     clreol;
  148.     write(prompt, ' ');
  149.     readln(s);
  150.     AskString := s;
  151.   END;
  152.  
  153.   PROCEDURE Reader.ShowStatus;
  154.   var i : integer;
  155.   BEGIN
  156.     gotoxy(1,1);
  157.     write(fo.filename, '   Line ',IxNoY1, ' of ', TotalItems, '.  Col: ',FirstColumn);
  158.     clreol;
  159.     gotoxy(1,2);
  160.     write('> F1 for commands');
  161.     clreol;
  162.   END;
  163.  
  164.   PROCEDURE Reader.Message(s : str80);
  165.   BEGIN
  166.     gotoxy(1,2);
  167.     write('> ', s);
  168.     clreol;
  169.   END;
  170.  
  171. END.
  172.